草庐IT

Android SurfaceView Canvas 用线程绘制

全部标签

java - Guava 的 Cache<K, Semaphore> 和 weakValues() 是线程安全的吗?

我需要一个按键锁定机制来保护按键绑定(bind)的关键部分。尽管ConcurrentMap对于并发就足够了,我也不希望map累积旧key并无限增长。理想情况下,数据结构最终(或之后立即)释放用于未使用锁的键的内存。我有点想Guava的Cache用weakValues()build会成功的:privatestaticfinalLoadingCacheKEY_MUTEX=CacheBuilder.newBuilder().weakValues().build(newCacheLoader(){@OverridepublicSemaphoreload(Kkey)throwsException

java - 信号量 - 为什么我的线程一个接一个地运行而不是并发运行?

我正在尝试编写一个程序,在Main类中可以启动未知数量的新线程。每个线程依次调用SingletonCopier类,该类应调用文件传输操作。我的目标是,无论线程请求的数量如何,都是将并发传输的数量限制为2个传输,所以我想用Semaphore来解决它。我的问题是,线程似乎一个接一个地运行,而不是并发运行。这是我尝试做的:publicclassCopier{privatestaticfinalintPOOL_SIZE=2;privatestaticvolatileCopierinstance=null;privatestaticSemaphoresemaphore;privateCopier

java - nanoTime 可以跨线程工作吗

我有一个线程将数据插入队列,另一个线程从队列中读取数据并进行处理。我想检查数据在处理之前在队列中的停留时间。我在第一个线程推送之前在数据中添加了一个时间参数(使用System.nanoTime()计算)。一旦第二个线程处理它,它就会计算System.nanoTime()并找到与数据中之前设置的时间的差异。这能正常工作吗?我问这个是因为我在日志中看到了负面差异。更新我想澄清一下,开始时间是由一个进程放在不同机器上的,差异是在不同机器上计算的。 最佳答案 我在线程和进程之间使用了System.nanoTime()。在单台机器上它是全局的

java - 当多个线程同时请求加载同一个类时会发生什么?

在多线程环境下,当多个线程同时引用一个类时,JVM是否最终会多次加载该类?如果不是,同步是如何发生的? 最佳答案 该类将被加载一次。参见jls12.4.2ForeachclassorinterfaceC,thereisauniqueinitializationlockLC.ThemappingfromCtoLCislefttothediscretionoftheJavaVirtualMachineimplementation.TheprocedureforinitializingCisthenasfollows:Synchroniz

java - 如何在 Java 3d 场景上绘制 2d 叠加层?

我有一个用Java3d编写的场景,其中使用以下代码将用户的查看位置设置为某个坐标:ViewingPlatformvp=simpleUniverse.getViewingPlatform();TransformGroupsteerTG=vp.getViewPlatformTransform();Transform3Dt3d=newTransform3D();steerTG.getTransform(t3d);t3d.lookAt(newPoint3d(-5,10,25),newPoint3d(0,0,0),newVector3d(0,1,0));t3d.invert();steerTG.

java - 如果我使用 JNI 从 C 的多个线程调用 java 函数会怎样?

此链接似乎表明“它只是有效”:(在7.3附加native线程下的底部相当远)http://java.sun.com/docs/books/jni/html/invoke.html我不明白这怎么可能,嵌入式JVM会自动启动自己的线程吗?或者排队JNI调用?否则怎么可能多次调用同一个虚拟机。我没有指示执行任何线程?我能想到的任何工作方式是,如果java代码将简单地在与c代码相同的调用线程中执行。那是对的吗?这意味着我不必在Java中执行任何线程。 最佳答案 jvm不必创建自己的线程,方法调用在创建它们的native线程上执行。Attac

java - 发布对象和线程安全

我在“JavaConcurrencyInPractice”中读到“在完全构造之前发布对象会危及线程安全”。有人可以解释一下吗? 最佳答案 考虑这段代码:publicclassWorld{publicstaticPoint_point;publicstaticvoidmain(String[]args){newPointMaker().start();System.out.println(_point);}}publicclassPoint{privatefinalint_x,_y;publicPoint(intx,inty){_x=

java - 在 Java 中创建和绘制巨大的(缓冲的)图像

我正在开发一个绘制矩阵的应用程序-使用Java2D-它可以变得非常大,例如30000x30000像素。此时此刻,我已经对BufferedImage进行了一些试验,但创建如此巨大的BufferedImage会导致内存不足异常,即使在扩大堆时也是如此。现在我正在考虑将图像拆分为多个图像/区域,当我在某个区域完成后将其写入磁盘并创建一个新的区域/BufferedImage并继续绘制。我对其他人如何处理这件事的想法很感兴趣。我已经离开Java一段时间了,所以欢迎任何具体的例子。 最佳答案 我为一个新的/小型开源项目做出贡献,它可能非常适合您

java - 如何使用 libgdx 中的简单纹理绘制自定义形状?

我想在我的游戏中绘制自定义静态形状,就像愤怒的小鸟所做的那样:但问题是纹理是方形的。我们如何告诉“SpriteBatch”绘制带有某些顶点的形状?有人有什么想法吗? 最佳答案 根据docs:ASpriteBatchisusedtodraw2Drectanglesthatreferenceatexture(region)所以本质上,此方法不允许您指定矩形以外的任何其他几何体。但是,有一个drawmethod这允许您指定“矩形”的四个坐标并将其变成其他东西。您必须将几何体分解成适合此基元的更小的部分。看起来这种方法不适合几何变化。更好的

java - "Found 1 deadlock"但跟踪显示未被任何线程锁定

JVM告诉我发生了死锁:FoundoneJava-leveldeadlock:============================="TP-Processor107":waitingforownablesynchronizer0x00002aaaf58e70f0,(ajava.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync),whichisheldby"indexTrackerThread3""indexTrackerThread3":waitingforownablesynchronizer0x00002aaaf4